package variable

import (
	"fmt"
	"unsafe"
)

//变量使用三种方式
func fun1() {
	//0.指定类型且赋值
	var d int8 = 127
	fmt.Println("d=", d)
	//1.指定变量类型，声明后不赋值，使用基础数据类型默认值
	var a int
	a = 12
	fmt.Println("a=", a)
	//2.根据值自行判断变量类型，类型推导
	var b = "tom"
	fmt.Println("b=", b)
	//3.省略var，使用:=赋值，相当于声明的同时赋值
	c := 10.10
	fmt.Println("c=", c)
}

//同时声明多个变量
func fun2() {
	var a, b, c int
	fmt.Println(a, b, c)
	//声明多个变量并赋值
	var n1, name, n3 = 100, "tom", 11
	fmt.Println(n1, name, n3)
	//使用类型推导
	n2, nam, n4 := 100, "tom", 11
	fmt.Println(n2, nam, n4)

}

//全局变量声明
var m = 1
var n = "tom"
var (
	x = 1
	y = 2
)

func fun3() {
	var name string
	name = "sss"
	fmt.Println(name)
	fmt.Println(m, n)
	fmt.Println(x, y)
}

func fun4() {
	var age = 18
	//使用格式化输出查看数据类型
	fmt.Printf("age的类型是%T\n", age)
	//查看变量占用的字节大小。64位即8字节。
	fmt.Printf("age占用的字节数是%d", unsafe.Sizeof(age))
}

func fun5() {
	//浮点数,默认为float64
	num := 5.5
	fmt.Printf("age的类型是%T\n", num)
	//.124=0.123
	num2 := .123
	fmt.Println(num2)
	//科学计数法形式 5.23467*10²
	num3 := 5.23467e2
	fmt.Println(num3)
	//科学计数法形式 5.23467/10²
	num4 := 5.23467e-2
	fmt.Println(num4)
}

//基本数据类型之间的转换
//基本数据类型只能显式转换 T(v)
func fun6() {
	var i int = 100
	var n float32
	n = float32(i)
	fmt.Print(n)
}
